/*************************************************
 * 描述: 列委托路由
 *
 * File: columndelegaterouter.h
 * Author: shizhixin@mozihealthcare.cn
 * Date: 2025-10-21
 * Update: 
 * ************************************************/
#ifndef COREXI_COMMON_PC_COLUMNDELEGATEROUTER_H
#define COREXI_COMMON_PC_COLUMNDELEGATEROUTER_H

#include <QStyledItemDelegate>
#include <QHash>

class ColumnDelegateRouter : public QStyledItemDelegate
{
public:
	/**
	 * @brief 构造函数
	 * @param parent
	 */
	explicit ColumnDelegateRouter(QObject* parent = nullptr);

	/**
	 * @brief 默认委托
	 * @param delegate
	 */
	void setDefaultDelegate(QStyledItemDelegate* delegate);

	/**
	 * @brief 设置单元格级委托
	 * @param row 行索引
	 * @param delegate 单元格级委托
	 */
	void setCellDelegate(int row, QStyledItemDelegate* delegate);

	/**
	 * @brief 获取单元格级委托(如果没有对应的，返回空)
	 * @param row 行索引
	 * @return 单元格级委托
	 */
	QStyledItemDelegate* cellDelegate(int row);

	/**
	 * @brief 获取索引对应的委托(如果没有对应的，返回默认委托，默认委托有可能为空)
	 * @param index 索引
	 * @return 索引对应的委托
	 */
	QStyledItemDelegate* delegateForIndex(const QModelIndex& index) const;

private:
	// 列级默认委托
	QStyledItemDelegate* m_defaultDelegate;
	// 单元格级委托hash
	QHash<int, QStyledItemDelegate*> m_cellDelegates;
};


#endif //COREXI_COMMON_PC_COLUMNDELEGATEROUTER_H